package com.fuluwa.domain.bank.service;

import java.util.List;

import com.fuluwa.domain.bank.dto.AccountDTO;
import com.fuluwa.domain.bank.model.Account;
import com.fuluwa.domain.bank.model.Account.AccountType;
import com.fuluwa.domain.bank.model.Nobook;
import com.fuluwa.domain.security.model.User;
import com.fuluwa.infra.exception.PersistenceException;

public interface AccountService {
	Account openingAccount(User user, AccountType accountType) throws PersistenceException;

	void deposit(AccountDTO accountDTO) throws PersistenceException;

	void withdrawl(AccountDTO accountDTO) throws PersistenceException;
	
	void serviceCharge(AccountDTO accountDTO) throws PersistenceException;

	void fundsTransfer(AccountDTO account) throws PersistenceException;

	String queryBalance(String accountNo) throws PersistenceException;

	List<Nobook> queryFundsDetails(String accountNo) throws PersistenceException;

	void closureAccount(String accountNo) throws PersistenceException;

	void reversal(String referenceNo) throws PersistenceException;
	
	void hold(AccountDTO accountDTO) throws PersistenceException;
	
	void unhold(AccountDTO accountDTO) throws PersistenceException;
}
